/------------------------------------------------------------------------------/

;Uduotis: parasyti program, kuri iveda simboliu eilutu ir
;atspausdina pozicijas simboliu, sutampanciu su pirmuoju
;pvz., abs daa52ss -> 0 5 6 arba 5 6

sseg segment stack
 DB 255 dup(?)
sseg ends

dseg segment
 msg1 DB 'Iveskite eilute: ', '$'
 msg2 DB 13, 10 ,'Pozicijos: ', '$'
 msg3 DB 13,10,'KLAIDA: Ivedete tuscia eilute!!!',13,10,'$'
 duom DB 255 dup('$')
dseg ends

cseg segment
 assume cs:cseg, ds:dseg
main proc far
 PUSH ds                ; uzsikraunami duomenys is dseg
 sub ax, ax
 PUSH ax        
 MOV ax, dseg
 MOV ds, ax

 lea dx, msg1        ; isvedam i ekrama msg1
 MOV ah, 9                ; funkcija 9 isspausdins dx'e esancia reiksme
 int 21h                

 lea dx, duom        ; Ivedam duomenis
 MOV ah, 0Ah        ; 0Ah - ivedimas is klaviaturos
 int 21h                
 
 cmp duom[1],0        ; tikrina, ar ivesta eilute nera tuscia        
 Je tuscia        

 lea dx, msg2        ; Isveda i ekrana msg2
 MOV ah, 9                
 int 21h                
 
 lea di, duom        ; ikeliam i di duom adresa
 ADD di, 2                
 MOV bl, ds:di
 lea si, duom        
 ADD si, 3
 MOV cx, '0'        
 
ciklas:
 MOV al, ds:si        ; i al perkeliamas duom simbolis i
 INC si
 INC cx
 cmp al, bl
 je isvedimas
 cmp al, '$'
 je galas
 JMP ciklas
  
isvedimas:
  MOV dx, cx
  MOV ah, 02h
  int 21h
  MOV dx, ' '
  MOV ah, 02h
  int 21h
  cmp cx, '9'
  je galas
  JMP ciklas
    
galas:
  MOV ah, 4Ch        
  int 21h
  
tuscia:
  MOV ah,9                          
  lea dx,msg3                        
  int 21h        
  
main        endp
cseg        ends
END        main
/------------------------------------------------------------------------------/



/------------------------------------------------------------------------------/
;Pakeisti ivesto eilutes mazasias raides didziosiomis

init_ds macro            ;Makro duomenu segmentui inicializuoti
      mov ax,data
      mov ds,ax
      endm

out_str macro str      ;Makro eilutes isvedimui
      push ax
      mov ah,09h
      mov dx,offset str
      int 21h
      pop ax
      endm

get_chr macro            ;Makro simbolio ivedimui is klaviaturos
      mov ah,1h      
      int 21h
      endm

      
data segment para public 'data'                  ;duomenu segmento
;apraso pradzia
msg1       db 'Iveskite eilute: $'                  
msg2       db 10,13,'Pakeista eilute atrodo: $'
input      db 200 dup('$')                        
data ends

stk segment stack
      db 256 dup ('?')
stk ends

code       segment para public 'code'
      assume cs:code, ds:data, ss:stk

main       proc
      init_ds      
      out_str msg1      
      mov bx,offset input            ;patalpiname i BX input
;eilutes pradzios adresa

inp:      get_chr                        ;skaitome simbolius
      cmp al,13                  ;sulyginame ar ivestas
;simbolis nera lygus ENTER
      je finish                  ;jeigu equal pereiname prie
;finish
        cmp al,61h                  ;lyginame ivesta simboli
;su 'a' kodu
      jb next                        ;jeigu reiksme mazesne tai
;pereiname prie next
      cmp al,7ah                    ;lyginame ivesta simboli
;su 'z' kodu
      ja next                        ;jeigu reiskme didesne
;pereiname prie next
      sub al,20h                  ;jeigu reiskme yra tarp a-z
;tai atimdami 20h gausime Didziaja raide
next:      mov [bx],al                  ;patalpiname simboli is al i
;atminti adresu patalpintu registre bx
      inc bx                        ;padidiname registro bx
;reiskme vienetu
      jmp inp                        ;pereiname prie inp

finish: out_str msg2
      out_str input
      mov ax,4c00h
      int 21h

main endp
code ends
end main
/------------------------------------------------------------------------------/



/------------------------------------------------------------------------------/


;Parasyti prog., kuri iveda simboliu eil ir atsp. rasta tarpu sk.
;pvz., ivedus 'abs 52 d4' turi atspauzdinti 2
;Parase Kons



sseg segment stack
 DB 256 dup(?)
sseg ends

dseg segment
 msg1 DB 'Iveskite eilute: ', '$'
 msg2 DB 13, 10 ,'Tarpu skaicius: ', '$'
 klai DB 13, 10 ,'Klaida, ivesta tuscia eilute!!! ', '$'
 duom DB 256 dup('$')
dseg ends

cseg segment
 assume cs:cseg, ds:dseg
main proc far
 PUSH ds
 sub ax, ax
 PUSH ax                ; is pradziu ax = 0
 MOV ax, dseg
 MOV ds, ax
 
 MOV ah, 9                
 lea dx, msg1        ; isvedam i ekrama msg1
 int 21h                

 MOV ah, 0Ah        
 lea dx, duom        ; Ivedam duomenis is klavieturos
 int 21h                

 cmp duom[1], 0
 je pab
 
 MOV ah, 9                
 lea dx, msg2        ; Isveda i ekrana msg2
 int 21h                
 
 lea si, duom        ;
 ADD si, 2                ; Ruosiames ciklams
 MOV cx, '0'        
 
ciklas:
 MOV al, ds:si
 INC si         ;padidina vienetu
 cmp al, ' '    ;lygina su tarpu
 je tarpas
 cmp al, '$'
 je spausd
 JMP ciklas
 
pab:
 mov ah, 9      ;isveda pranesima kad klaida
 lea dx, klai
 int 21h
 
 tarpas:
  ADD cx,1      ;sumuoja tarpus
  JMP ciklas
  
 spausd:
  MOV dx, cx    ;atspauzdina tarpu skaiciu
  MOV ah, 02h
  int 21h
  JMP galas
  
 galas:          ;aprasomas isejimas is programos
  MOV ah, 4Ch
  int 21h
  
main        endp
cseg        ends
END        main

/------------------------------------------------------------------------------/